package com.tfjybj.itoo.teach.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.teach.entity.TrainingProgramsEntity;
import com.tfjybj.itoo.teach.model.TrainingProgramsModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * TrainingProgramsDao接口
 * trainingPrograms表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@Repository("trainingProgramsDao")
public interface TrainingProgramsDao extends BaseMapper<TrainingProgramsEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据课程_id模糊查询trainingPrograms
     *
     * @param courseId 课程_id
     * @return 模糊查询的trainingPrograms集合
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<TrainingProgramsEntity> queryByCourseId(@Param("courseId") String courseId);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据课程类型ID查询课程信息
     *
     * @param courseTypeId 课程类型id
     * @return 课程信息实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<TrainingProgramsModel> queryCourseByCourseTypeId(@Param("courseTypeId") String courseTypeId);

    /**
     * 根据课程ID查询专业id，专业名称
     *
     * @param courseId 课程id
     * @return 课程信息实体
     * @author 李建帅
     * @since 2.0.0 2018-11-10 21:34:17
     */
    List<TrainingProgramsModel> queryProfessionByCourseId(@Param("courseId") String courseId);

    /**
     * 根据条件模糊查询培养计划
     *
     * @param strLike 模糊条件（课程名称）
     * @return 培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-11 16:27:44
     */
    List<TrainingProgramsModel> queryTrainingProgramListPageInfo(@Param("strLike") String strLike);

    /**
     * 根据条件模糊查询培养计划-培养计划专用
     *
     * @param academyId    学院Id
     * @param professionId 专业ID
     * @param grade        年级
     * @return 培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-16 09:18:15
     */
    List<TrainingProgramsModel> queryTrainingProgramByAcPrIdAndGrade(@Param("academyId") String academyId, @Param("professionId") String professionId, @Param("grade") String grade);

    /**
     * 根据条件导出培养计划
     *
     * @param academyId    学院Id
     * @param professionId 专业ID
     * @param grade        年级
     * @param strLike      查询条件
     * @return 培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-16 09:18:15
     */
    List<TrainingProgramsModel> exportByStrLike(@Param("academyId") String academyId, @Param("professionId") String professionId, @Param("grade") String grade, @Param("strLike") String strLike);

    /**
     * 分页查询所有TrainingPrograms
     *
     * @return 培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-12 14:52:50
     */
    List<TrainingProgramsModel> queryAllTrainingProgramsPageInfo();

    /**
     * 根据课程ID、专业ID、学期学年ID查询培养计划
     *
     * @param courseId     课程ID
     * @param professionId 专业ID
     * @param semesterId   学年学期ID
     * @return 培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/13 20:14
     */
    List<TrainingProgramsModel> queryTpByCoPrSeId(@Param("courseId") String courseId, @Param("professionId") String professionId, @Param("semesterId") String semesterId);

    /**
     * 根据培养计划ID查询培养计划详情
     *
     * @param idList 培养计划ID
     * @return 培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-15 17:17:03
     */
    List<TrainingProgramsModel> queryTrainingProgramsById(@Param("idList") List<String> idList);

    /**
     * 根据学年学期ID和专业ID查询课程信息
     *
     * @param semesterId   学年学期ID
     * @param professionId 专业ID
     * @return 课程信息
     * @author 李建帅
     * @since 2.0.0 2018/11/17 9:09
     */
    List<TrainingProgramsModel> queryCourseBySemProId(@Param("semesterId") String semesterId, @Param("professionId") String professionId);

    /**
     * 根据学年学期ID、专业ID、课程ID、年级查询培养计划是否已存在
     *
     * @param semesterId   学年学期ID
     * @param professionId 专业ID
     * @param courseId     课程ID
     * @param grade        年级
     * @return 培养计划ID
     * @author 李建帅
     * @since 2.0.0 2018/11/17 19:19
     */
    String findIdIsExist(@Param("semesterId") String semesterId, @Param("professionId") String professionId, @Param("courseId") String courseId, @Param("grade") String grade);

    /**
     * 根据学年学期ID和专业ID，年级（课程类型为专选课已写死）查询专选课课程ID集合
     *
     * @param semesterId   学年学期Id
     * @param professionId 专业ID
     * @param grade        年级
     * @return 公选课课程ID集合
     * @author 李建帅
     * @since 2.0.0 2018/11/17 19:18
     */
    List<String> queryCourseIdBySemProId(@Param("semesterId") String semesterId, @Param("professionId") String professionId, @Param("grade") String grade);

    /**
     * 无参查询当前学年的课程id
     * @param trainingProgramsEntity trainingProgramsEntity
     * @return 当前学年的trainingPrograms集合
     * @author 杨江涛
     * @since 2.0.0 2018-11-24 19:12:58
     */
    List<TrainingProgramsEntity> findCourseId(TrainingProgramsEntity trainingProgramsEntity);

    /**
     * 根据专业id查询当前学年课程(与course表联表查询)
     *
     * @param professionId 专业id
     * @param semester 学年学期id
     * @return 当前学年课程信息
     * @author 杨江涛
     * @since 2.0.0 2018-12-4 14:41:59
     */
    List<TrainingProgramsModel> findCourseByProfessionId(@Param("professionId") String professionId, @Param("semester") String semester);

}
